package com.ruoqing.inform.service.impl;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.ruoqing.core.constant.Constants;
import com.ruoqing.core.vo.inform.SmsResponseVo;
import com.ruoqing.inform.service.api.PhoneCodeService;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;


/**
	* @author YaoXian
	* @title: PhoneCodeService
	* @projectName ruoxi-blog
	* @description: 若兮微服务 - 短信服务 - 发送手机验证码接口实现类
	* @date 2020-11-04 21:08
	*/
@RestController
@Slf4j
public class PhoneCodeServiceImpl implements PhoneCodeService {
		
		@ApiOperation(value = "发送手机验证码", httpMethod = "GET")
		@ApiImplicitParams(value = {@ApiImplicitParam(name = "phoneNumber", value = "手机号"
						, required = true, dataType = "String"),@ApiImplicitParam(name = "signName", value = "短信签名"
						, required = true, dataType = "String"),@ApiImplicitParam(name = "templateCode", value = "短信模板"
						, required = true, dataType = "String"),@ApiImplicitParam(name = "code", value = "短信验证码"
						, required = true, dataType = "String")})
		@Override
		public SmsResponseVo sendMobileCode(String phoneNumber, String signName, String templateCode, String code) throws Exception {
				//产品名称:云通信短信API产品,开发者无需替换
				final String product = "Dysmsapi";
				//产品域名,开发者无需替换
				final String domain = "dysmsapi.aliyuncs.com";
				
				// TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)
				
				final String accessKeyId = "LTAI4G1LZKPmpR83i3cGcHEF";
				final String accessKeySecret = "Qomrr7tyBROZ8IDq3w6LMzv3CQZe53";
				
				//可自助调整超时时间
				System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
				System.setProperty("sun.net.client.defaultReadTimeout", "10000");
				
				//初始化acsClient,暂不支持region化
				IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
				DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
				IAcsClient acsClient = new DefaultAcsClient(profile);
				
				//组装请求对象-具体描述见控制台-文档部分内容
				SendSmsRequest request = new SendSmsRequest();
				//必填:待发送手机号
				request.setPhoneNumbers(phoneNumber);
				//必填:短信签名-可在短信控制台中找到
				request.setSignName(signName);
				//必填:短信模板-可在短信控制台中找到
				request.setTemplateCode(templateCode);
				//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
				request.setTemplateParam("{\"code\":\""+code+"\"}");
				//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
				request.setOutId("yourOutId");
				//hint 此处可能会抛出异常，注意catch
				SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
				SmsResponseVo smsResponseVo = new SmsResponseVo();
				smsResponseVo.setStatus(Constants.responseOk);
				smsResponseVo.setMessage(sendSmsResponse.getMessage());
				smsResponseVo.setCode(code);
				log.info(smsResponseVo.getMessage()+"  "+sendSmsResponse.getMessage()+"  "+code);
				return smsResponseVo;
		}
}
